﻿using System;

namespace Common.Date
{
    public class DateCallculation
    {
        #region Member
        #endregion

        #region Konstruktor
        public DateCallculation()
        {
        }
        #endregion

        #region public Functions
        /// <summary>
        /// Ermitellt das Zieldatum ausgehend vom Startdatum indem Feiertage und Wochenenden nicht mit berechnet 
        /// werden und nur reine Arbeitstage gezählt werden.
        /// </summary>
        /// <param name="startdate">Startdatum von dem ausgegangen wird.</param>
        /// <param name="workingdaysToAdd">Arbeitstage die draufaddiert werden sollen</param>
        /// <returns>Fälligkeitsdatum inkl. des letzten workingDays</returns>
        public DateTime CallculateSelectedWorkDay(DateTime startdate, int workingdaysToAdd)
        {
            //Die schleife so lange durchlaufen bis die workingdays errreicht sind.
            for (int day = 0; day < workingdaysToAdd;)
            {
                //Je durchlaufe einen Tag hinzufügen zum startdatum
                startdate = startdate.AddDays(1);
                if (!WeekendLogic.IsWeekend(startdate) && !HollydayLogic.GetInstance(startdate.Year).IsFeiertag(startdate))
                {
                    //Die Tage dürfen nur aufaddiert werden wenn es sich nicht um ein
                    //wochenende oder einen Feiertag handelt, sonst muss immer ein weiterer Tag hinzugefügt werden.
                    day++;    
                }
            }

            return startdate;
        }
        #endregion

        #region Private Functions
        #endregion
    }
}
